<?php
namespace app\common\controller;

use think\Controller;

// 后台公共控制器
class Backend extends Controller{
    // 定义一个可继承的一个全局属性 不需要登录
    protected $NoNeedLogin=[];

    public function __construct(){
        // 继承父类
        parent::__construct();

        // 定义一个全局模型
        $this->AdminModel=model('Admin');
        $this->ConfigModel=model('Config');

        // 去除数组中的空元素
        $this->NoNeedLogin=array_filter($this->NoNeedLogin);

        if(empty($this->NoNeedLogin)){
            $this->IsLogin();
        }else{
            // 所有方法
            $all="*";

            // 获取当前访问的控制器方法
            $action=$this->request->action();

            // 正常情况*和action控制器方法如果有一个满足在NoNeedLogin这个数组里面 就说明不需要登录
            if(!in_array($all,$this->NoNeedLogin) && !in_array($action,$this->NoNeedLogin)){
                // 需要登录
                $this->IsLogin();
            }
        }

        // 获取系统配置
        $this->system();
    }

    public function IsLogin(){
        // 判断是否有登录
        $LoginAdmin=session('LoginAdmin');

        if(!empty($LoginAdmin)){
            // 查出来是否正确
            $id=isset($LoginAdmin['id']) ? $LoginAdmin['id'] : 0;

            // 根据id去查询用户 关联查询
            $admin=$this->AdminModel->find($id);
            
            // 当这个人不存在
            if(!$admin){
                // session属于伪造的
                session('LoginAdmin',null);
                $this->error('非法登录',url('admin/index/login'));
                exit;
            }

            // 判断是否被禁用
            if($admin['state']==0){
                session('LoginAdmin',null);
                $this->error('该管理员已被禁用',url('admin/index/login'));
                exit;
            }

            // 设置给所有全局的控制器
            $this->LoginAdmin=$admin;
            
            // 当这个人存在的话 做一个全局的赋值
            $this->assign('LoginAdmin',$admin);
        }else{
            $this->error('请先登录',url('admin/index/login'));
            exit;
        }
    }

    public function system(){
        $SystemList=$this->ConfigModel->select();

        $System=[];

        foreach($SystemList as $item){
            $System[$item['key']]=$item;
        }

        // 让每个界面都可以获取系统配置
        $this->assign('System',$System);
    }
}








?>